home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1999 March / EnigmA AMIGA RUN 35 (1999)(G.R. Edizioni)(IT)[!][issue 1999-03].iso / earcd / devel / vbcc-src / vbc.h < prev    next >
C/C++ Source or Header  |  1999-01-01  |  7KB  |  212 lines

  1. /*  $VER: vbcc (vbc.h) V0.4     */
  2.  
  3. #include "supp.h"
  4.  
  5. #define eval_constn(a) eval_const(&a->val,a->ntyp->flags)
  6.  
  7. struct identifier_list{
  8.     char *identifier;
  9.     int length;
  10.     struct identifier_list *next;
  11. };
  12. struct struct_identifier{
  13. /*    int flags;*/
  14.     char *identifier;
  15.     struct struct_declaration *sd;
  16.     struct struct_identifier *next;
  17. };
  18.  
  19. #ifndef NODES
  20. struct node{
  21.     int flags,lvalue,sidefx;
  22.     struct Typ *ntyp;
  23.     struct node *left;
  24.     struct node *right;
  25.     struct argument_list *alist;
  26.     char *identifier;
  27.     union atyps val;
  28.     struct obj o;
  29. };
  30.  
  31. typedef struct node *np;
  32.  
  33. #define NODES sizeof(struct node)
  34. #endif
  35.  
  36. struct argument_list{
  37.     np  arg;
  38.     struct argument_list *next;
  39. };
  40.  
  41.  
  42. #define MAXI 100 /* maximale Laenge von Identifiers in Bytes    */
  43. #define MAXINPUT 2000    /* maximale Laenge einer Eingabezeile in Bytes  */
  44. #define MAXN 64 /* maximale Verschachtelung von Bloecken */
  45.  
  46. extern struct Typ *arith_typ(struct Typ*,struct Typ *);
  47. extern void insert_const(np);
  48. extern int int_erw(int);
  49. extern int type_expression(np),compare_pointers(struct Typ *,struct Typ *,int),
  50.     compare_sd(struct struct_declaration *,struct struct_declaration *);
  51. extern np identifier_expression(void),constant_expression(void),string_expression(void),
  52.    postfix_expression(void),unary_expression(void),cast_expression(void),
  53.    multiplicative_expression(void),additive_expression(void),
  54.    shift_expression(void),relational_expression(void),equality_expression(void),
  55.    and_expression(void),exclusive_or_expression(void),
  56.    inclusive_or_expression(void),logical_and_expression(void),
  57.    logical_or_expression(void),conditional_expression(void),
  58.    assignment_expression(void),expression(void),primary_expression(void);
  59. /* puh  */
  60. extern void pre(FILE *,np),pra(FILE *,struct argument_list *);
  61. extern void free_expression(np),free_alist(struct argument_list *);
  62. extern void cpbez(char *m,int ckw),cpnum(char *m),killsp(void);
  63. extern struct struct_declaration *add_sd(struct struct_declaration *);
  64. extern void add_sl(struct struct_declaration *,struct struct_list (*)[]);
  65. extern void free_sd(struct struct_declaration *);
  66. extern void prl(FILE *,struct struct_declaration *);
  67. extern char *add_identifier(char *,int);
  68. extern struct Typ *declarator(struct Typ *),*direct_declarator(struct Typ *),
  69.            *pointer(struct Typ *),*declaration_specifiers(void);
  70. extern int declaration(int),type_uncomplete(struct Typ *);
  71. extern struct struct_declaration *find_struct(char *,int);
  72. extern void add_struct_identifier(char *,struct struct_declaration *);
  73. extern void free_si(struct struct_identifier *);
  74. extern char *s,*ident;
  75. extern char string[MAXINPUT+2],number[MAXI],buff[MAXI];
  76. extern struct struct_declaration *first_sd[MAXN],*last_sd[MAXN],*merk_sdf,*merk_sdl;
  77. extern struct struct_identifier *first_si[MAXN],*last_si[MAXN],*merk_sif,*merk_sil;
  78. extern struct identifier_list *first_ilist[MAXN],*last_ilist[MAXN],*merk_ilistf,*merk_ilistl;
  79. extern void free_ilist(struct identifier_list *);
  80. extern int nesting;
  81. extern struct Var *first_var[MAXN],*last_var[MAXN],*merk_varf,*merk_varl;
  82. extern void free_var(struct Var *);
  83. extern void var_declaration(void);
  84. extern int storage_class_specifiers(void);
  85. extern void enter_block(void),leave_block(void);
  86. extern struct Var *find_var(char *,int);
  87. extern struct Var *add_var(char *,struct Typ *,int,struct const_list *);
  88.  
  89. extern int usz;
  90.  
  91. extern void gen_IC(np,int,int),convert(np,int),gen_label(int);
  92. extern void savescratch(int,struct IC *,int);
  93. struct regargs_list{
  94.     struct regargs_list *next;
  95.     int reg;
  96.     struct Var *v;
  97. };
  98. #ifdef HAVE_REGPARMS
  99. extern zlong push_args(struct argument_list *,struct struct_declaration *,int,struct regargs_list **,struct reg_handle *,struct obj *,int);
  100. #else
  101. extern zlong push_args(struct argument_list *,struct struct_declaration *,int,struct regargs_list **);
  102. #endif
  103. extern int allocreg(int,int);
  104. extern void free_reg(int),alloc_hardreg(int);
  105.  
  106. extern FILE *out,*ic1,*ic2,*ppout;
  107.  
  108. extern void statement(void),labeled_statement(void),if_statement(void);
  109. extern void switch_statement(void),while_statement(void),for_statement(void);
  110. extern void do_statement(void),goto_statement(void),continue_statement(void);
  111. extern void break_statement(void),return_statement(void);
  112. extern void expression_statement(void),compound_statement(void);
  113. extern void translation_unit(void);
  114. extern int main(int, char *[]);
  115. extern int nocode,registerpri,looppri,currentpri;
  116.  
  117. extern np makepointer(np);
  118.  
  119. extern int switch_typ,switch_count,switch_act;
  120. struct llist{
  121.     char *identifier;
  122.     int label,flags,switch_count;
  123.     struct llist *next;
  124.     union atyps val;
  125. };
  126. #define LABELDEFINED 1
  127. #define LABELUSED 2
  128. #define LABELDEFAULT 4
  129. #define LSIZE sizeof(struct llist)
  130. extern struct llist *first_llist,*last_llist;
  131. extern struct llist *find_label(char *),*add_label(char *);
  132. extern void free_llist(struct llist *);
  133.  
  134. extern int endok,return_label,return_value,break_label;
  135. extern struct Var *return_var;
  136. extern struct Typ *return_typ;
  137. extern zlong local_offset[MAXN];
  138.  
  139. extern void scratch_var(struct obj *,int,struct Typ *);
  140. extern void get_scratch(struct obj *,int,int,struct Typ *);
  141. extern void gen_cond(struct obj *,int,int,int);
  142.  
  143. #define MAXCF 30
  144. extern int c_flags[MAXCF];
  145. extern char *c_flags_name[MAXCF];
  146. extern union ppi c_flags_val[MAXCF];
  147.  
  148. extern FILE *open_out(char *,char *);
  149.  
  150. extern char *inname;
  151.  
  152. extern void gen_vars(struct Var *);
  153.  
  154. /*  Format der Tabelle fuer Fehlermeldungen */
  155. struct err_out{
  156.     char *text;
  157.     int  flags;
  158. };
  159. /*  Flags fuer err_out.flags    */
  160. #define ERROR       1
  161. #define WARNING     2
  162. #define ANSIV       4
  163. #define INTERNAL    8
  164. #define FATAL      16
  165. #define MESSAGE    32
  166. #define DONTWARN   64
  167. #define PREPROC   128
  168. #define NOLINE    256
  169. #define INFUNC    512
  170. #define INIC     1024
  171.  
  172. extern struct err_out err_out[];
  173. extern int err_num;
  174.  
  175. extern int afterlabel;
  176.  
  177. extern int errors;
  178.  
  179. /*  fuer den Praeprozessor  */
  180.  
  181. #define MAXPPINPUT 2000     /*  maximale Laenge einer Eingabezeile  */
  182. #define MAXINCNESTING 50    /*  maximale Verschachtelung von Includes   */
  183.  
  184. extern FILE *in[MAXINCNESTING];    /*  Sourcefiles     */
  185. extern int zn[MAXINCNESTING];      /*  Zeilennummern   */
  186. extern char *filename[MAXINCNESTING];   /*  Filenamen   */
  187. extern int incnesting;             /*  aktuelle Verschachtelungstiefe  */
  188. extern unsigned long linenr;                 /*  Zeilennummer */
  189.  
  190. #define MAXINCPATHS 20      /*  maximale Anzahl der Includepfade    */
  191.  
  192. extern char *incpath[MAXINCPATHS];   /*  Includepfade    */
  193.                                             /*  Rest ist NULL   */
  194.  
  195. extern int incpathc;     /*  Anzahl der Includepfade     */
  196.  
  197. extern int pp_init(void);
  198. extern void pp_free(void);
  199. extern int pp_include(char *filename);
  200. extern int pp_nextline(void);
  201. extern int pp_define(char *text);
  202.  
  203. extern int read_new_line;
  204. extern int float_used;
  205. extern char *cur_func;
  206. extern int line;
  207. extern void free_clist(struct const_list *);
  208. extern struct const_list *first_clist,*last_clist;
  209. extern struct Var *regsbuf[MAXR+1];
  210. extern int regbnesting[MAXR+1];
  211.  
  212.